//
//  HYLStatusViewModel.swift
//  iOSwechat
//
//  Created by apple on 16/3/2.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit
import SDWebImage

// 专门处理CZStatus的数据
class HYLStatusViewModel: NSObject {
    
// 加载微博数据
    func loadStatus(loadStatusCallBack:(statuses:[HYLStatus]?,error:NSError?) ->()){
        // 调用网络攻击类的方法加载数据，字典转模型
        HYLNetworkTool.sharedInstance.loadStatuses { (rusult, error) -> () in
            if error != nil {
                // print("加载微博数据失败")
                loadStatusCallBack(statuses: nil, error: error)
                return
            }
            
            // 获取返回数据中的微博数据，并且字典转模型
            if let array = rusult?["statuses"] as? [[String:AnyObject]] {
                
                // 定义一个空数组保存模型数组
                var statuses = [HYLStatus]()
                
                // 遍历数组字典转模型
                for dict in array {
                    let status = HYLStatus(dict: dict)
                    statuses.append(status)
                }
                
                // 在通知控制器之前下载图片
                self.loadWebImage(statuses, loadStatusCallBack: loadStatusCallBack)
                
                // print("微博信息\(statuses)")
                // loadStatusCallBack(statuses: statuses, error: nil)
            }else {
                loadStatusCallBack(statuses: nil, error: nil)
            }
        }
    }
    
    
    /**
    在控制器显示之前下载图片
    
    - parameter statuses: 要下载图片的微博数据
    */
    func loadWebImage (statuses: [HYLStatus],loadStatusCallBack: (status : [HYLStatus]?, error:NSError?) -> ()){
        
        // 记录图片大小
        var length = 0
        let group = dispatch_group_create()
        
        // 获取模型里面的图片地址来下载
        for status in statuses {
            // 要下载的图片
            var urls:[NSURL] = [NSURL]()
            
            // 查找原创微博要下载的图片---不一定有
            if let downloadURL = status.storePictureURLs {
                urls = downloadURL
            }
            
            // 查找被转发微博要下载图片---
            if let downloadURL = status.retweeted_status?.storePictureURLs {
                urls = downloadURL
            }
            
            // 只需要缓存一条带图片的微博图片
            if urls.count == 1 {
                let url = urls.first
                // 进入组
                dispatch_group_enter(group)
                // 下载图片异步任务
                SDWebImageManager.sharedManager().downloadImageWithURL(url, options: SDWebImageOptions(rawValue: 0), progress: nil, completed: { (image, error, _, _, _) -> Void in
                    // 移除组
                    dispatch_group_leave(group)
                    
                    if error != nil {
                        print("下载出错：\(error)")
                        return
                    }
                    
                    let data = UIImagePNGRepresentation(image)
                    length += data!.length
                })
            }
        }
        
        // 所有图片缓存完需要让控制器去显示数据
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            print("所有图片下载完成,通知控制器显示数据: 缓存图片大小: \(CGFloat(length) / 1024.0 / 1024.0) MB")
            // 闭包回调
            loadStatusCallBack(status: statuses, error: nil)
        }
    }
    
}




